package com.example.forum.services;

import java.util.List;

import com.example.forum.model.Announcement;

/**
 * 系统公告服务接口
 */
public interface IAnnouncementService {
    
    /**
     * 创建公告
     * @param announcement 公告对象
     * @return 创建成功的公告ID
     */
    Long create(Announcement announcement);
    
    /**
     * 根据ID获取公告
     * @param id 公告ID
     * @return 公告对象
     */
    Announcement getById(Long id);
    
    /**
     * 更新公告信息
     * @param announcement 公告对象
     * @return 操作成功返回true，否则返回false
     */
    boolean update(Announcement announcement);
    
    /**
     * 删除公告
     * @param id 公告ID
     * @return 操作成功返回true，否则返回false
     */
    boolean delete(Long id);
    
    /**
     * 获取有效公告列表（已发布且在有效期内）
     * @param page 页码
     * @param size 每页条数
     * @return 公告列表
     */
    List<Announcement> getActiveAnnouncements(int page, int size);
    
    /**
     * 获取所有公告列表（包括草稿和已过期）
     * @param page 页码
     * @param size 每页条数
     * @return 公告列表
     */
    List<Announcement> getAllAnnouncements(int page, int size);
    
    /**
     * 获取置顶公告列表
     * @return 置顶公告列表
     */
    List<Announcement> getTopAnnouncements();
    
    /**
     * 获取有效公告数量
     * @return 公告数量
     */
    int countActiveAnnouncements();
    
    /**
     * 获取所有公告数量
     * @return 公告数量
     */
    int countAllAnnouncements();
    
    /**
     * 浏览公告（增加浏览量）
     * @param id 公告ID
     * @return 操作成功返回true，否则返回false
     */
    boolean view(Long id);
    
    /**
     * 发布公告
     * @param id 公告ID
     * @return 操作成功返回true，否则返回false
     */
    boolean publish(Long id);
    
    /**
     * 将公告设为草稿
     * @param id 公告ID
     * @return 操作成功返回true，否则返回false
     */
    boolean draft(Long id);
    
    /**
     * 将公告设为已过期
     * @param id 公告ID
     * @return 操作成功返回true，否则返回false
     */
    boolean expire(Long id);
    
    /**
     * 置顶公告
     * @param id 公告ID
     * @return 操作成功返回true，否则返回false
     */
    boolean setTop(Long id);
    
    /**
     * 取消置顶公告
     * @param id 公告ID
     * @return 操作成功返回true，否则返回false
     */
    boolean cancelTop(Long id);
} 